const webpack = require("webpack");
const AntDesignThemePlugin = require("antd-theme-webpack-plugin");
const path = require("path");
const project = require("./config/index");

const options = {
  antDir: path.join(__dirname, "./node_modules/ant-design-vue"),
  stylesDir: path.join(__dirname, "./src"),
  varFile: path.join(
    __dirname,
    "./node_modules/ant-design-vue/lib/style/themes/default.less"
  ),
  // mainLessFile: path.join(__dirname, "./src/styles/index.less"),
  mainLessFile: "",
  themeVariables: ["@primary-color"],
  generateOnce: false,
};

const themePlugin = new AntDesignThemePlugin(options);

module.exports = {
  productionSourceMap: project.buildParams.productSourceMap,
  css: {
    loaderOptions: {
      less: {
        modifyVars: {
          "primary-color": project.primaryColor,
        },
        javascriptEnabled: true,
      },
    },
  },
  configureWebpack: {
    plugins: [themePlugin, new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/)],
    // resolve: {
    //   alias: {
    //     "@ant-design/icons/lib/dist$": path.resolve(
    //       __dirname,
    //       "./src/icons.js"
    //     ),
    //   },
    // },
  },
  chainWebpack: (config) => {
    // 替换项目 title
    config.plugin("html").tap((args) => {
      args[0].title = project.projectName;
      return args;
    });

    const svgRule = config.module.rule("svg");

    // 清楚已有的所有 loader。
    // 如果你不这样做，接下来的 loader 会附加在该规则现有的 loader 之后。
    svgRule.uses.clear();

    // 添加要替换的 loader
    svgRule.use("vue-svg-loader").loader("vue-svg-loader");
  },
  devServer: {
    proxy: {
      "/api": {
        target: project.proxyUrl,
        bypass: function (req, res) {
          if (req.headers.accept.indexOf("html") !== -1) {
            console.log("Skipping proxy for browser request.");
            return "/index.html";
          } else if (process.env.MOCK !== "none") {
            const name = req.path.split("/api/")[1].split("/").join("_");
            const mock = require(`./mock/${name}`);
            const result = mock(req.method);
            delete require.cache[require.resolve(`./mock/${name}`)];
            return res.send(result);
          }
        },
      },
    },
  },
};
